#pragma once
#include <iostream>
// TODO: just using base target as interface to expose the main method
struct TargetAsInterface {
  virtual void Request() = 0;
};

struct NeedToConvertToTarget{
  void ClearRequest() {
    std::cout << "[DEBUG]: calling [NeedToConvertToTarget::ClearRequest()]" << std::endl;
    std::cout << "Enjoy!!!" << std::endl;
  }
};

// TODO: Actual target
struct OneTarget : public TargetAsInterface {
  NeedToConvertToTarget* ctotarget;
  OneTarget(NeedToConvertToTarget* ctotarget) {
    this->ctotarget = ctotarget;
  } 

  void Request() override {
    std::cout << "run the more clear request" << std::endl;
    ctotarget->ClearRequest();
  }
};

